Перейти к основному содержимому

5.05. Ключевые слова в C#

Разработчику Архитектору

Ключевые слова в C#

Управление потоком выполнения

Ключевое словоНазначениеПример
ifУсловное выполнение блока кода при истинности выраженияif (count > 0) Process();
elseАльтернативное выполнение при ложности условия ifif (valid) Accept(); else Reject();
switchМножественный выбор на основе значения выраженияswitch (status) { case 1: ... }
caseМетка варианта в конструкции switchcase ConnectionState.Open:
defaultОбработчик значений по умолчанию в switchdefault: HandleUnknown();
breakПрерывание выполнения цикла или секции switchif (found) break;
continueПереход к следующей итерации циклаif (skip) continue;
gotoБезусловный переход к меткеgoto retry;
returnВозврат значения из метода и завершение его выполненияreturn result;
yieldВозврат элемента последовательности в итератореyield return item;

Циклы

Ключевое словоНазначениеПример
forЦикл с инициализацией, условием и шагомfor (int i = 0; i < 10; i++) { ... }
foreachИтерация по элементам коллекцииforeach (var item in list) { ... }
whileЦикл с проверкой условия перед итерациейwhile (active) { ... }
doЦикл с проверкой условия после итерацииdo { ... } while (retry);

Обработка исключений

Ключевое словоНазначениеПример
tryБлок кода с потенциальными исключениямиtry { Operation(); }
catchОбработчик перехваченного исключенияcatch (IOException ex) { ... }
finallyБлок гарантированного выполнения после tryfinally { Cleanup(); }
throwГенерация исключенияthrow new ArgumentException();

Типы и члены

Ключевое словоНазначениеПример
classОбъявление ссылочного типаclass Customer { }
structОбъявление типа значенияstruct Point { }
interfaceОбъявление контракта для типовinterface ILogger { void Log(); }
enumОбъявление перечисленияenum Status { Active, Inactive }
recordОбъявление неизменяемого типа данныхrecord Person(string Name);
delegateОбъявление типа делегатаdelegate void Handler();
eventОбъявление событияevent EventHandler Changed;
namespaceОрганизация кода в иерархию имёнnamespace MyApp.Data { }
usingИмпорт пространства имён или управление ресурсамиusing var file = Open();

Модификаторы доступа

Ключевое словоНазначениеПример
publicДоступ из любого кодаpublic int Id { get; }
privateДоступ только внутри содержащего типаprivate string secret;
protectedДоступ внутри типа и его наследниковprotected void Init() { }
internalДоступ внутри сборкиinternal class Helper { }
protected internalДоступ внутри сборки или из наследниковprotected internal void Share() { }
private protectedДоступ из наследников внутри сборкиprivate protected void Limited() { }

Модификаторы членов

Ключевое словоНазначениеПример
staticПринадлежность члена типу, а не экземпляруstatic int Counter;
readonlyНеизменяемость поля после инициализацииreadonly DateTime created;
constКомпиляционная константаconst double Pi = 3.14159;
sealedЗапрет наследования класса или переопределения методаsealed class Utility { }
abstractОбъявление нереализованного члена для наследниковabstract void Execute();
virtualРазрешение переопределения метода в наследникахvirtual void Render() { }
overrideПереопределение виртуального члена базового типаoverride void Render() { }
newСокрытие члена базового типаnew void Log() { }
partialРазделение объявления типа на несколько файловpartial class Generator { }
asyncОбъявление асинхронного методаasync Task LoadAsync() { }
unsafeРазрешение небезопасного кода с указателямиunsafe void Copy(byte* src) { }

Параметры и аргументы

Ключевое словоНазначениеПример
paramsПередача переменного числа аргументовvoid Log(params string[] messages)
refПередача аргумента по ссылкеSwap(ref a, ref b);
outВыходной параметр для возврата значенияbool TryParse(string s, out int result)
inПередача аргумента по ссылке только для чтенияvoid Process(in Data item)
thisСсылка на текущий экземплярreturn this.Id;
baseДоступ к членам базового типаbase.Initialize();

Операторы и выражения

Ключевое словоНазначениеПример
isПроверка совместимости типов или сопоставление с образцомif (obj is string s) { ... }
asБезопасное приведение типовvar text = obj as string;
typeofПолучение объекта System.Type для типаType t = typeof(Customer);
sizeofОпределение размера типа значения в байтахint size = sizeof(int);
checkedПроверка переполнения в арифметических операцияхchecked { sum = a + b; }
uncheckedОтключение проверки переполненияunchecked { hash = x * 31 + y; }
stackallocВыделение памяти в стекеSpan<int> buffer = stackalloc int[100];
trueПерегрузка логического оператораpublic static bool operator true(Box b)
falseПерегрузка логического оператораpublic static bool operator false(Box b)
operatorПерегрузка операторов или преобразованийpublic static Box operator +(Box a, Box b)
implicitОбъявление неявного преобразования типовpublic static implicit operator string(Id id)
explicitОбъявление явного преобразования типовpublic static explicit operator Id(string s)

Контекстные ключевые слова

Ключевое словоНазначениеПример
varВывод типа переменной компиляторомvar list = new List<int>();
dynamicОтложенная проверка типов до времени выполненияdynamic obj = GetObject();
nameofПолучение имени символа в виде строкиthrow new ArgumentNullException(nameof(value));
whenДополнительное условие в фильтре исключений или сопоставлении с образцомcatch (Exception ex) when (ex.HResult == 0x80070005)
globalЯвное указание глобального пространства имёнglobal::System.Console.WriteLine();
valueЗначение свойства в аксессорахset { _field = value; }
getАксессор чтения свойства или индексатораget { return _value; }
setАксессор записи свойства или индексатораset { _value = value; }
initАксессор инициализации свойства только при созданииpublic string Name { get; init; }
addАксессор добавления обработчика событияadd { _handlers += value; }
removeАксессор удаления обработчика событияremove { _handlers -= value; }
whereОграничение универсального параметра типаwhere T : class
aliasСоздание псевдонима для типа в директиве externextern alias Legacy;
ascendingСортировка по возрастанию в запросахorderby x ascending
descendingСортировка по убыванию в запросахorderby x descending
addАксессор добавления обработчика событияadd { _handlers += value; }
raiseУстаревший аксессор события в C++/CLI
moduleОбъявление модуля в C++/CLI
propertyОбъявление свойства в C++/CLI
assemblyУказание уровня доступа на уровне сборки[assembly: InternalsVisibleTo("Test")]
typeУказание типа в атрибутах[type: Obsolete]
methodУказание метода в атрибутах[method: STAThread]
fieldУказание поля в атрибутах[field: NonSerialized]
eventУказание события в атрибутах[event: FieldNotUsed]
paramУказание параметра в атрибутах[param: MarshalAs(UnmanagedType.LPStr)]
propertyУказание свойства в атрибутах[property: DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
returnУказание возвращаемого значения в атрибутах[return: MarshalAs(UnmanagedType.Bool)]

Логические операторы

Ключевое словоНазначениеПример
andЛогическое И в выражениях сопоставления с образцомif (x is > 0 and < 100) { }
orЛогическое ИЛИ в выражениях сопоставления с образцомif (status is Ready or Completed) { }
notЛогическое НЕ в выражениях сопоставления с образцомif (x is not null) { }

Асинхронное программирование

Ключевое словоНазначениеПример
awaitОжидание завершения асинхронной операцииvar result = await FetchAsync();
lockБлокировка объекта для синхронизации потоковlock (_sync) { Update(); }
volatileУказание на переменную, доступную из нескольких потоковvolatile bool flag;

LINQ и запросы

Ключевое словоНазначениеПример
fromНачало выражения запросаfrom item in collection
whereФильтрация элементов в запросеwhere item.Price > 100
selectПроекция результатов запросаselect item.Name
groupГруппировка элементов в запросеgroup item by item.Category
intoХранение промежуточного результата запросаgroup item by item.Category into g
orderbyСортировка элементов в запросеorderby item.Name ascending
joinСоединение двух последовательностейjoin order in orders on customer.Id equals order.CustomerId
letВведение переменной в выражение запросаlet total = item.Price * item.Quantity
onУказание ключей соединения в joinon x.Key equals y.Key
equalsОператор сравнения в joinon customer.Id equals order.CustomerId
byУказание ключа группировки в groupgroup item by item.Category
ascendingСортировка по возрастаниюorderby item.Price ascending
descendingСортировка по убываниюorderby item.Price descending

Управление памятью

Ключевое словоНазначениеПример
fixedЗакрепление объекта в памяти для указателейfixed (char* p = str) { }
nullЛитерал, представляющий отсутствие ссылкиstring s = null;
null!Подавление предупреждения о возможном значении nullreturn GetValue()!;